package com.ftg.learn.chapter01;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * pojo类，最简单java
 * 这是同学类，所有同学
 * @author KangJx
 * @date 2021/5/25
 */
public class Person {

    int sno;

    public String name;

    String age;


    public Person(){

    }


    public Person(int sno, String name, String age) {
        this.sno = sno;
        this.name = name;
        this.age = age;
    }

    /**
     * 如何完成对三个元素的赋值操作
     * 直接对属性进行赋值
     * 构造方法
     * setter getter
     */



    public int getSno() {
        return sno;
    }

    public void setSno(int sno) {
        this.sno = sno;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public static void main(String[] args) {
        //高级使用 反射  : 我拿不到这个类！new 操作

        //我要把new操作，放开给第三方

        //这个地址 字符串，不能代表 person,反射类完成这个操作

        //民政局  （男女） （ -- ）
        //包地址
        String path = "com.ftg.learn.chapter01.Person";

        //class : 对正在运行的java类或者 接口进行操作的一个应用程序
        try {
            Class c1 = Class.forName(path);

            //拿到所有c1里面的属性
            Field[] rs = c1.getDeclaredFields();
            //访问修饰符 [private protected default public]
            for(Field f : rs){
                System.out.println(f.getName());
            }

            System.out.println("拿到里面所有的方法");
            // 项层父类是object
            Method[] ms = c1.getDeclaredMethods();
            for(Method m : ms){
                System.out.println(m.getName());
            }

            //拿到方法就可以调用方法 ( 。。。invoke )
            //向上转型
            Object o = c1.newInstance();
            Person p1 = (Person)o;
            p1.getName();
            //ClassNotFoundException  表示如果你给我的path不存在！
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }

    }

}
